/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.delogic.simuladorbancario.main.business;

import br.com.delogic.simuladorbancario.main.model.Cliente;
import br.com.delogic.simuladorbancario.main.model.ClienteFisico;
import br.com.delogic.simuladorbancario.main.model.ClienteJuridico;
import br.com.delogic.simuladorbancario.main.model.SituacaoCliente;
import br.com.delogic.simuladorbancario.main.model.Sucesso;
import br.com.delogic.simuladorbancario.main.model.UnidadeFederativa;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.swing.DefaultComboBoxModel;
import javax.swing.SpringLayout;

/**
 *
 * @author rodrigo
 */
public class ClienteBusiness {
    
    private final Map<Integer, Cliente> clientes = new HashMap<Integer, Cliente>();
    
    //implementar a função para cadastrar
    public Sucesso cadastrarCliente(Cliente cliente){
        cliente.setSituacao(SituacaoCliente.ATIVO);
        cliente.setCodigo(clientes.size()+1);
        
        clientes.put(cliente.getCodigo(), cliente); 
        return new Sucesso("Cliente Cadastrado com Sucesso");
    }
    
    public Cliente consultarPorCodigo(Integer codigo){
        return clientes.get(codigo);
    }
    
    public Sucesso alterarCliente(Cliente cliente){
        clientes.put(cliente.getCodigo(), cliente);
        return new Sucesso("Cliente Alterado com Sucesso");
    }
    
    public Sucesso bloquearCliente(Integer codCliente){
        consultarPorCodigo(codCliente).setSituacao(SituacaoCliente.BLOQUEADO);
        
        return new Sucesso("Cliente Bloqueado com Sucesso");
    }
    
    public Sucesso reativarCliente(Integer codCliente){
        consultarPorCodigo(codCliente).setSituacao(SituacaoCliente.ATIVO);
        
        return new Sucesso("Cliente Reativado com Sucesso");        
    }
    
    public Sucesso cancelarCliente(Integer codCliente){
        consultarPorCodigo(codCliente).setSituacao(SituacaoCliente.CANCELADO);
        
        return new Sucesso("Cliente Cancelado com Sucesso");
    }
    
    public List<Cliente> consultarPorNome(String nome){
        List<Cliente> clientesEncontrados = new ArrayList<>();
        for( Cliente c : clientes.values()){
            if(c.getNomeCompleto().toUpperCase().contains(nome.toUpperCase()))
                clientesEncontrados.add(c);
        }
        return clientesEncontrados;
    }
    
    public Cliente consultarPorCpf(String cpf){
        for( Cliente c : clientes.values()){
            if(c instanceof ClienteFisico && ((ClienteFisico)c).getCpf().equals(cpf))
                return c;
        }
        return null;
    }
    
    public Cliente consultarPorCnpj(String cnpj){
        for( Cliente c : clientes.values()){
            if(c instanceof ClienteJuridico && ((ClienteJuridico)c).getCnpj().equals(cnpj))
                return c;
        }
        return null;
    }
    
}
